package classpath

import "errors"
import "strings"

/*
按路径分隔符解析成更小的Entry，所以用数组表示，
数组最好用更好用的slice类型表示，这里没有优化
*/
type CompositeEntry []Entry

func newCompositeEntry(pathList string) CompositeEntry {
	compositeEntry := []Entry{}
	// range用来遍历数组，slice等数据结构，range时有两个参数，一个代表索引，一个代表值，
	// 由于这里索引用不着，所以用下划线代替
	for _, path := range strings.Split(pathList, pathListSeparator) {
		entry := newEntry(path)
		compositeEntry = append(compositeEntry, entry)
	}
	return compositeEntry
}

func (self CompositeEntry) readClass(className string) ([]byte, Entry, error) {
	for _, entry := range self {
		data, from, err := entry.readClass(className)
		if err == nil {
			return data, from, nil
		}
	}
	return nil, nil, errors.New("class not found: " + className)
}

/*
调用每一个子路径的String方法，并拼接起来返回
*/
func (self CompositeEntry) String() string {
	strs := make([]string, len(self))
	for i, entry := range self {
		strs[i] = entry.String()
	}
	return strings.Join(strs, pathListSeparator)
}
